<?php
/**
 * Ограничения применения правила доступа только к ресурсам, владельцем которых
 * является текущий пользователь. ID владельца получается при помощи интерфейса
 * Workset_Acl_Owner_Interface.
 */
class Workset_Acl_Assert_Owner implements Zend_Acl_Assert_Interface {
	/**
	 * (non-PHPdoc)
	 * @see library/Zend/Acl/Assert/Zend_Acl_Assert_Interface#assert()
	 */
	public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $role = null, Zend_Acl_Resource_Interface $resource = null, $privilege = null) {
		if ($role && $resource instanceof Workset_Acl_Owner_Interface) {
			// Попытка получения идентификатора текущего пользователя.
			$iUserId = ($sUserId = $role->getRoleId()) && ($sUserId[0] == '~')
				? intval(substr($sUserId,1))
				: 0;

			// Проверка того, что пользователь является владельцем ресурса.
			return $iUserId !== 0 && $iUserId == $resource->getOwnerId();
		}

		return false;
	}
}
?>